const int Rred = 6;   //机动车红灯
const int Ryel = 5;   //机动车黄灯
const int Rgreen = 4; //机动车绿灯

const int Pred = 3;    //人行道红灯
const int Pgreen = 2;  //人行道绿灯
const int Butt = 10; //按键

int state = 0;   //按键状态，0-没按下，1-按下

//init
void setup() {
    //2-6号灯为输出模式
    for(int i=2; i<=6;i++) {
        pinMode(i, OUTPUT);  
    }
    //10号灯位输入模式
    pinMode(Butt, INPUT);
    Serial.begin(9600);   //串口输出
}

void loop() {
    //获取按钮状态
    state = digitalRead(Butt);   //读取按钮状态
    delay(500);
    Serial.println(state);       //输出按键状态0-1

    if(state) {
        //有人按下按钮要通行
        digitalWrite(Rgreen, LOW);  //车 绿灯灭
        digitalWrite(Ryel, HIGH);   //车 黄灯闪烁
        digitalWrite(Ryel, LOW);
        digitalWrite(Rred, HIGH);   //车 红灯亮，禁止车通行

        digitalWrite(Pred, LOW);    //人 红灯灭
        digitalWrite(Pgreen, HIGH); //人 绿灯亮（可通行）
        delay(3000);     //3s 等待3秒，实际应用中可能是3分钟
    } else {
        //没有行人通过时
        digitalWrite(Rgreen, HIGH);//车 绿灯亮（通行）
        digitalWrite(Ryel, LOW);   //车 黄灯灭
        digitalWrite(Rred, LOW);   //车 红灯灭

        digitalWrite(Pred, HIGH);  //人 红灯亮
        digitalWrite(Pgreen, LOW); //人 绿灯灭（禁止通行）
    }
}
